1282. Group the People Given the Group Size They Belong To

마지막 수정일: 2025. 05. 21.

Map을 이용한 문제
첫sol하긴 했지만 시간이 생각보다 오래걸림

개선 전

JAVASCRIPT
/**
 * @param {number[]} groupSizes
 * @return {number[][]}
 */
function groupThePeople(groupSizes) {
  let grouping = new Map();
  for (let i = 0; i < groupSizes.length; i++) {
    const size = groupSizes[i];

    if (!grouping.has(size)) {
      grouping.set(size, []);
    }
    grouping.get(size).push(i);
  }

  let output = [];

  for (const [key, value] of grouping) {
    if (value.length !== key) {
      for (let i = 0; i < value.length; i += key) {
        output.push(value.slice(i, i + key));
      }
    } else {
      output.push(value);
    }
  }

  return output;
}

개선 후

굳이 삽입과 계산을 따로 진행하지 않고 한 번에 진행하는 형식으로 변경

JAVASCRIPT
var groupThePeople = function (groupSizes) {
	const res = []
	const groupMap = new Map();
	groupSizes.forEach((size, index) => {
		if (!groupMap.has(size)) groupMap.set(size, []);
		const curIndexes = groupMap.get(size)
		curIndexes.push(index);
		
		if (curIndexes.length === size) {
			res.push(curIndexes);
			groupMap.set(size, [])
		}
	})
	return res
};